const Koa = require("koa");
// 允许跨域请求
const cors = require("@koa/cors");
// 通过Gzip/Brotli压缩响应体，减少传输数据量。 感觉没啥用
const compress = require("koa-compress");
// 将客户端通过 POST、PUT 等请求提交的报文主体数据（如 JSON、表单等）转换为 JavaScript 对象
const bodyParser = require("koa-bodyparser");

const router = require("./router/index.js");
const { authErrorHandler, verifyToken } = require("./utils/jwt");
// 日志管理中间件 记录请求 和 系统日志实例
const { accessLogger, systemLogger } = require("./utils/logger.js");

const app = new Koa();

// 记录所有 HTTP 请求的日志å
app.use(accessLogger());
app
  .use(cors({ origin: "*" }))
  .use(bodyParser())
  .use(compress())
  .use(authErrorHandler)
  .use(verifyToken)
  .use(router.routes(), router.allowedMethods());

app.on("error", (err) => {
  systemLogger.error(err); // 记录系统级错误
});

const port = process.env.NODE_ENV === "production" ? 3000 : 8099;

async function bootstrap() {
  app.listen(port, () => {
    console.log(`Server is running on port ${port}`);
  });
}
bootstrap();
